Stalling of life expectancy improvements occurred in the UK from 2010 onwards. It was also seen in some other Western European countries. While the reason and severity of this is debated, some also contend the stalling of improvements seen is artefact following an unusual decade of improvement in 2000s (e.g. Murphy 2021).
This notebook will compare annual changes in life expectancy at both birth (\(e_0\)) and at age 65 (\(e_{65}\)) from 1980 to 2019 (or the latest available year) in England and Wales, Scotland, France, Italy, Spains and Germany. Germany includes a ‘Synthetic Germany’ created from a weighted average of East and West German data for common years. The method for creating this ‘Synthetic Germany’ is covered in the methods section in brief and in Appendix X for more detail. In order to explore the hypothesis that the recent stalling in life expectancy, most marked in England and Wales, was an expected ‘correction’ after a decade of unusually fast life expectancy improvements, we have selected the years from 1980 onwards.
Data were extracted from the Human Mortality Database via the R package HMDHFDplus.
The following countries are included in the comparison:
GBRTENW)GBR_SCO)GBR_UK) #we haven’t included UK but can doFRANTP)ESP)ITA)DEUTNP)DEUTE)DEUTW)For each of these countries, and for males and females separately, we are interested in the annual changes in life expectancy at birth (\(e_0\)) and life expectancy at age 65 (\(e_{65}\)), from 1980 to the last available year for each country. In addition, we compare average life expectancy improvements over the 4 decades: 1980, 1990, 2000, and 2010.
We then compared whether the average between the decades was significant, using a regression model.
To allow UK national trends to be compared with a single German population, we attempted to produce a ‘Synthetic German’ population with data for East and West Germany for years prior to reunification. We estimated that this ‘Synthetic Germany’ could be produced by using a weighted average of 20% East Germany, and 80% West German life expectancy trends. More precise estimates can be produced, and the methods used to reach this conclusion are detailed in Appendix X.
## # A tibble: 3,820 × 5
## code year x sex ex
## <chr> <int> <int> <chr> <dbl>
## 1 DEUTNP 1990 0 female 78.4
## 2 DEUTNP 1990 65 female 17.6
## 3 DEUTNP 1991 0 female 78.7
## 4 DEUTNP 1991 65 female 17.8
## 5 DEUTNP 1992 0 female 79.1
## 6 DEUTNP 1992 65 female 18.1
## 7 DEUTNP 1993 0 female 79.2
## 8 DEUTNP 1993 65 female 18.1
## 9 DEUTNP 1994 0 female 79.5
## 10 DEUTNP 1994 65 female 18.4
## # … with 3,810 more rows
The following figures show life expectancy at birth and at age 65 for selected nations from 1980 to the latest available year for males and females.
## Joining, by = "code"
Life Expectancy at birth
## Joining, by = "code"
Life Expectancy at age 65
Next, we compare the annual change in life expectancy at birth and at aged 65 years for the nations from 1980 to the latest available year, by sex.
## # A tibble: 3,972 × 6
## code year x sex ex delta_ex
## <chr> <int> <dbl> <chr> <dbl> <dbl>
## 1 FRATNP 1816 0 female 41.1 NA
## 2 FRATNP 1816 65 female 10.8 NA
## 3 FRATNP 1816 0 male 39.1 NA
## 4 FRATNP 1816 65 male 10.7 NA
## 5 FRATNP 1817 0 female 40.2 -0.890
## 6 FRATNP 1817 65 female 11.0 0.210
## 7 FRATNP 1817 0 male 38.2 -0.830
## 8 FRATNP 1817 65 male 10.6 -0.140
## 9 FRATNP 1818 0 female 39.1 -1.13
## 10 FRATNP 1818 65 female 11.1 0.0300
## # … with 3,962 more rows
Finally, we used time-trend analysis to explore the changes in life expectancy over the 4 decades: 1980s, 1990s, 2000s, and 2010s. This produces the average change for the decade, whether negative or positive, the standard error and its statistical significance for each country by sex.
## Graphs of annual change in life expectancy
The below graphs show the annual change in life expectancy at birth and at aged 65 years for males and females for the nations examined. The pink and green lines are non-linear smoothed.
NB: those with statistically significant ‘breakpoints’ in annual change in life expectancy are listed in the table above.
The table below shows average improvements by decade for England and Wales (standard error).
## `summarise()` has grouped output by 'code', 'x', 'sex'. You can override using
## the `.groups` argument.
sex | 1980 | 1990 | 2000 | 2010 |
female | 0.19 (0.177) | 0.164 (0.215) | 0.248 (0.211) | 0.083 (0.184) |
male | 0.252 (0.159) | 0.231 (0.193) | 0.315 (0.148) | 0.137 (0.187) |
Are there significant differences in average rates of change in \(e_x\) by decade? Another way of expressing this question is to ask whether knowing the decade in which an observation has been observed is informative as to what such values will be. This rephrased question was addressed by, for each starting age (0 or 65 years), sex and country, fitting two competing model specifications - \(M_0\) and \(M_A\) - and running an F test on the residuals of these two models. The Null model specification, \(M_0\), regresses \(\delta e_x\) (observed annual changes in \(e_x\)) against a single intercept term \(\alpha\); put another way: \(M_0\) assumes that all observations are drawn from a Normal distribution with a mean value of \(\alpha\), and that this is consistent across all observed decades. The alternative model specification, \(M_A\), also includes the \(\alpha\) term, but also includes dummy variables to indicate which decade the realised value of \(\delta e_0\) corresponds to. (Because one of the decades needs to be the reference category against which other decades are compared, there are one fewer decadal dummy variables than decades in the dataset for a given country, and the \(\alpha\) parameter in \(M_A\) estimates the mean change in \(\delta e_0\) in the first decade, and so cannot be compared directly with the \(\alpha\) parameter in \(M_0\).) A P-value from the F test comparing \(M_0\) and \(M_A\) of less than 0.05 is taken to indicate that \(M_A\) should be preferred to \(M_0\), and so that there are systemic differences in average rates of improvement by decade for a given country, sex, and starting age.
We found the only significant change decade-on-decades was for East Germany for females at birth and at aged 65 years. This is consistent with existing literature in this area, showing the convergence of life expectancy for females in East and West Germany following reunification.
##
## Call:
## lm(formula = delta_ex ~ 1, data = dta_for_decade_comparison)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.43359 -0.09359 -0.03359 0.13141 0.41641
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.17359 0.03185 5.45 3.24e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1989 on 38 degrees of freedom
##
## Call:
## lm(formula = delta_ex ~ factor(decade), data = dta_for_decade_comparison)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.40000 -0.11567 0.00667 0.12833 0.34600
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.19000 0.06260 3.035 0.00451 **
## factor(decade)1990 -0.02600 0.08852 -0.294 0.77072
## factor(decade)2000 0.05800 0.08852 0.655 0.51663
## factor(decade)2010 -0.10667 0.09095 -1.173 0.24880
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1979 on 35 degrees of freedom
## Multiple R-squared: 0.08798, Adjusted R-squared: 0.009808
## F-statistic: 1.125 on 3 and 35 DF, p-value: 0.3521
## Analysis of Variance Table
##
## Model 1: delta_ex ~ 1
## Model 2: delta_ex ~ factor(decade)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 38 1.5037
## 2 35 1.3714 3 0.1323 1.1255 0.3521
##
## Call:
## lm(formula = delta_ex ~ factor(decade), data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.5560 -0.1115 -0.0160 0.1133 0.4612
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.16400 0.06882 2.383 0.0229 *
## factor(decade)1990 0.23200 0.09732 2.384 0.0229 *
## factor(decade)2000 0.04200 0.09732 0.432 0.6688
## factor(decade)2010 -0.05525 0.10323 -0.535 0.5960
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2176 on 34 degrees of freedom
## Multiple R-squared: 0.2151, Adjusted R-squared: 0.1459
## F-statistic: 3.106 on 3 and 34 DF, p-value: 0.03925
##
## Call:
## lm(formula = delta_ex ~ factor(decade), data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.31125 -0.08300 -0.01162 0.08475 0.33875
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.08200 0.04910 1.670 0.1041
## factor(decade)1990 0.20400 0.06944 2.938 0.0059 **
## factor(decade)2000 0.07100 0.06944 1.022 0.3138
## factor(decade)2010 0.01925 0.07365 0.261 0.7954
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1553 on 34 degrees of freedom
## Multiple R-squared: 0.232, Adjusted R-squared: 0.1642
## F-statistic: 3.423 on 3 and 34 DF, p-value: 0.02796
Though there may be systemic differences in average changes in life expectancy over time, such differences may not be patterned by decade, and so the above model specification may not have been appropriate to detect any such changes. Instead of looking for systemic differences by decade, we can instead look at whether there are any systemic and detectable ‘breaks’ in the trends over time. If our data were life expectancy over time, this could be achieved through joinpoint analysis, in which the slope is allowed to change over time. As instead are data are annual changes in life expectancy, we are interested in detecting changes in intercept over time. If we define our Null (no change) model as follows:
\[ M_0 : y(t) = \alpha + e \] Where \(e \backsim N(0, \sigma^2)\). i.e. all observations \(y\) are draws from \(N(\alpha, \sigma^2)\). The alternative model specification against which this is compared is then:
\[ M_A : y(t) = \alpha_0 + \beta_1 T(t) + e \] Where \(T(t)\) is defined as \(0\) where \(t \lt \tau\) and \(1\) where \(t \geq \tau\). (\(\alpha_0\) is used in \(M_A\) to indicate that this parameter is not directly comparable with \(\alpha\) in \(M_0\)).
This specification shows that there is an additional parameter \(\tau\) to be determined in order to produce \(M_A\). This \(\tau\) parameter is the breakpoint in the series. The selection of \(\tau\) will be determined by numeric optimisation, by selecting the value of \(\tau\) that minimised AIC.
Once the best possible \(M_A\), using the best value of \(\tau\), is selected, \(M_A\) will be compared with \(M_0\) using an F-test, allowing us to determine whether there is convincing evidence of any specific break in the data.
We will start with a single country, starting age, and sex, and with manual selection of \(\tau\), then generalise and automate further.
##
## Call:
## lm(formula = delta_ex ~ 1, data = example_df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.43359 -0.09359 -0.03359 0.13141 0.41641
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.17359 0.03185 5.45 3.24e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1989 on 38 degrees of freedom
## (1 observation deleted due to missingness)
##
## Call:
## lm(formula = delta_ex ~ year >= 1990, data = example_df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.42793 -0.09897 -0.02793 0.12603 0.42207
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.19000 0.06367 2.984 0.00502 **
## year >= 1990TRUE -0.02207 0.07384 -0.299 0.76671
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2014 on 37 degrees of freedom
## (1 observation deleted due to missingness)
## Multiple R-squared: 0.002408, Adjusted R-squared: -0.02455
## F-statistic: 0.08933 on 1 and 37 DF, p-value: 0.7667
##
## Call:
## lm(formula = delta_ex ~ year >= 1995, data = example_df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.41600 -0.10600 -0.01333 0.12400 0.43667
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.20600 0.05161 3.992 0.000299 ***
## year >= 1995TRUE -0.05267 0.06579 -0.801 0.428486
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1999 on 37 degrees of freedom
## (1 observation deleted due to missingness)
## Multiple R-squared: 0.01703, Adjusted R-squared: -0.009539
## F-statistic: 0.6409 on 1 and 37 DF, p-value: 0.4285
##
## Call:
## lm(formula = delta_ex ~ year >= 1997, data = example_df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.42318 -0.10012 -0.02318 0.12988 0.42682
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.18706 0.04880 3.833 0.000475 ***
## year >= 1997TRUE -0.02388 0.06498 -0.367 0.715379
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2012 on 37 degrees of freedom
## (1 observation deleted due to missingness)
## Multiple R-squared: 0.003636, Adjusted R-squared: -0.02329
## F-statistic: 0.135 on 1 and 37 DF, p-value: 0.7154
##
## Call:
## lm(formula = delta_ex ~ year >= 2008, data = example_df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.40357 -0.09857 -0.00273 0.11143 0.41727
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.19357 0.03759 5.149 8.89e-06 ***
## year >= 2008TRUE -0.07084 0.07078 -1.001 0.323
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1989 on 37 degrees of freedom
## (1 observation deleted due to missingness)
## Multiple R-squared: 0.02636, Adjusted R-squared: 4.468e-05
## F-statistic: 1.002 on 1 and 37 DF, p-value: 0.3234
##
## Call:
## lm(formula = delta_ex ~ year >= 2011, data = example_df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.40839 -0.10794 0.01161 0.12706 0.39161
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.19839 0.03507 5.657 1.83e-06 ***
## year >= 2011TRUE -0.12089 0.07743 -1.561 0.127
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1953 on 37 degrees of freedom
## (1 observation deleted due to missingness)
## Multiple R-squared: 0.0618, Adjusted R-squared: 0.03644
## F-statistic: 2.437 on 1 and 37 DF, p-value: 0.127
## Analysis of Variance Table
##
## Model 1: delta_ex ~ 1
## Model 2: delta_ex ~ T_param
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 38 1.5037
## 2 37 1.3347 1 0.16897 4.6839 0.03697 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Analysis of Variance Table
##
## Model 1: delta_ex ~ 1
## Model 2: delta_ex ~ T_param
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 38 1.19312
## 2 37 0.94298 1 0.25014 9.8149 0.003378 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Call:
## lm(formula = delta_ex ~ T_param, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.41143 -0.09665 -0.04188 0.09335 0.60813
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.26188 0.03171 8.259 6.41e-10 ***
## T_paramTRUE -0.10045 0.07484 -1.342 0.188
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1794 on 37 degrees of freedom
## (1 observation deleted due to missingness)
## Multiple R-squared: 0.04642, Adjusted R-squared: 0.02065
## F-statistic: 1.801 on 1 and 37 DF, p-value: 0.1877
##
## Call:
## lm(formula = delta_ex ~ 1, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.49385 -0.11885 -0.02385 0.05615 0.62615
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.24385 0.02902 8.402 3.41e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1812 on 38 degrees of freedom
## (1 observation deleted due to missingness)
## Analysis of Variance Table
##
## Model 1: delta_ex ~ 1
## Model 2: delta_ex ~ T_param
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 38 1.2483
## 2 37 1.1904 1 0.05795 1.8012 0.1877
## # A tibble: 36 × 5
## # Groups: code, x, sex [36]
## code x sex data best_tau
## <chr> <dbl> <chr> <list> <dbl>
## 1 DEUTNP 0 female <tibble [28 × 2]> 2004.
## 2 DEUTNP 65 female <tibble [28 × 2]> 2004.
## 3 DEUTE 0 female <tibble [39 × 2]> 2004.
## 4 DEUTE 65 female <tibble [39 × 2]> 2015
## 5 DEUTW 0 female <tibble [39 × 2]> 1999.
## 6 DEUTW 65 female <tibble [39 × 2]> 1998
## 7 ESP 0 female <tibble [40 × 2]> 1998.
## 8 ESP 65 female <tibble [40 × 2]> 1998.
## 9 FRATNP 0 female <tibble [40 × 2]> 1998.
## 10 FRATNP 65 female <tibble [40 × 2]> 1998.
## # … with 26 more rows
Next, we display a table with those countries where the breakpoint shows as statistically significant (at p value <0.05) compared to the null, where best_tau is the year.
Country | Age | Sex | Best_Tau | F Test P Value | Statistically significant |
GBRTENW | 0 | male | 2,013 | 0.003378317 | TRUE |
GBR_SCO | 0 | male | 2,015 | 0.009029495 | TRUE |
DEUTE | 0 | male | 1,991 | 0.010408898 | TRUE |
DEUTE | 65 | female | 1,987 | 0.019893564 | TRUE |
DEUTW | 0 | male | 2,015 | 0.029263626 | TRUE |
DEUTSYNTH | 0 | female | 2,007 | 0.029845768 | TRUE |
DEUTNP | 0 | male | 2,015 | 0.033571164 | TRUE |
DEUTW | 0 | female | 1,988 | 0.035407083 | TRUE |
GBRTENW | 0 | female | 2,012 | 0.036971650 | TRUE |
DEUTNP | 65 | male | 2,015 | 0.037615088 | TRUE |
DEUTE | 65 | male | 1,991 | 0.038763640 | TRUE |
FRATNP | 0 | male | 2,015 | 0.041175313 | TRUE |
DEUTSYNTH | 65 | male | 2,015 | 0.041825971 | TRUE |
DEUTNP | 0 | female | 2,007 | 0.045517734 | TRUE |
DEUTW | 65 | male | 2,015 | 0.046314979 | TRUE |
DEUTE | 0 | female | 2,005 | 0.048779675 | TRUE |
DEUTSYNTH | 0 | male | 2,015 | 0.049476783 | TRUE |
GBRTENW | 65 | male | 2,012 | 0.051021976 | FALSE |
GBR_SCO | 0 | female | 1,981 | 0.061953344 | FALSE |
ESP | 0 | female | 1,983 | 0.064064265 | FALSE |
FRATNP | 0 | female | 2,015 | 0.067963332 | FALSE |
DEUTSYNTH | 65 | female | 2,015 | 0.069544115 | FALSE |
DEUTNP | 65 | female | 2,015 | 0.083031092 | FALSE |
DEUTW | 65 | female | 2,015 | 0.089238885 | FALSE |
ESP | 0 | male | 1,983 | 0.092446451 | FALSE |
ITA | 0 | female | 2,005 | 0.107811573 | FALSE |
FRATNP | 65 | male | 2,015 | 0.122733887 | FALSE |
GBRTENW | 65 | female | 2,012 | 0.146051393 | FALSE |
GBR_SCO | 65 | male | 1,994 | 0.150769256 | FALSE |
ITA | 65 | male | 1,984 | 0.167066787 | FALSE |
ITA | 0 | male | 1,981 | 0.169500744 | FALSE |
FRATNP | 65 | female | 2,015 | 0.172067793 | FALSE |
GBR_SCO | 65 | female | 1,981 | 0.235879405 | FALSE |
ITA | 65 | female | 2,005 | 0.260633635 | FALSE |
ESP | 65 | male | 2,000 | 0.271958077 | FALSE |
ESP | 65 | female | 2,014 | 0.295177288 | FALSE |